﻿using System;
using System.Collections.Generic;
using System.Text;
using TM.QWeibo.SDK.Objects;

namespace TM.QWeibo.SDK.API
{
    /// <summary>
    /// 与私信相关的接口实现
    /// </summary>
    public class PrivateMessage
        : RequestBase
    {
        /// <summary>
        /// 根据授权对象实例化
        /// </summary>
        /// <param name="oauth"></param>
        public PrivateMessage(OAuth oauth)
            : base(oauth)
        { }

        /// <summary>
        /// 回调方法
        /// </summary>
        Action<ResponseData<Tweet>> CallBack { get; set; }

        #region 发一条私信

        /// <summary>
        /// 采用默认API请求地址发一条私信
        /// </summary>
        /// <param name="name">对方用户名</param>
        /// <param name="content">微博内容</param>
        /// <param name="clientip">用户ip(以分析用户所在地)</param>
        /// <param name="jing">经度（可以填空）</param>
        /// <param name="wei">纬度（可以填空）</param>
        /// <returns>结果</returns>
        public void Add(string name, string content, string clientip, string jing, string wei,Action<ResponseData<TweetOperateResult>> callback)
        {
            Parameters parameters = new Parameters();
            parameters.Add("format", this.ResponseDataFormat.ToString().ToLower());
            parameters.Add("name", name);
            parameters.Add("content", content);
            parameters.Add("clientip", clientip);
            parameters.Add("jing", jing);
            parameters.Add("wei", wei);
            this.PostData("http://open.t.qq.com/api/private/add", parameters, (json) =>
            {
                if (!string.IsNullOrEmpty(json))
                {
                    var rs = Util.JsonToObject<ResponseData<TweetOperateResult>>(json);
                    callback(rs);
                }
            });
        }

        #endregion

        #region 删除一条私信
        /// <summary>
        /// 采用默认API请求地址删除一条私信
        /// </summary>
        /// <param name="id">微博id</param>
        /// <returns>删除结果.</returns>
        public void Delete(long id,Action<ResponseData<TweetOperateResult>> callback)
        {
            var parameters = new Parameters();
            parameters.Add("format", this.ResponseDataFormat.ToString().ToLower());
            parameters.Add("id", id);
            PostData("http://open.t.qq.com/api/private/del", parameters, (json) =>
            {
                if (!string.IsNullOrEmpty(json))
                {
                    var rs = Util.JsonToObject<ResponseData<TweetOperateResult>>(json);
                    callback(rs);
                }
            });
        }

        #endregion

        #region 获取私信收件箱列表
        /// <summary>
        /// 采用默认API请求地址获取获取私信收件箱列表
        /// </summary>
        /// <param name="pageflag">分页标识</param>
        /// <param name="pagetime">本页起始时间（第一页 0，继续：根据返回记录时间决定）</param>
        /// <param name="reqnum">每次请求记录的条数（1-20条）</param>
        /// <returns>获取私信收件箱列表</returns>
        public void GetRecvList(PageFlag pageflag, long pagetime, int reqnum, Action<ResponseData<Tweet>> callback)
        {
            this.CallBack = callback;
            var parameters = new Parameters();
            parameters.Add("format", this.ResponseDataFormat.ToString().ToLower());
            parameters.Add("pageflag", (int)pageflag);
            parameters.Add("pagetime", pagetime);
            parameters.Add("reqnum", reqnum);
            this.GetData("http://open.t.qq.com/api/private/recv", parameters, GetRecvListEnd);
        }

        /// <summary>
        /// 获取列表结束回调
        /// </summary>
        /// <param name="json"></param>
        private void GetRecvListEnd(string json)
        {
            if(!string.IsNullOrEmpty(json) && this.CallBack!=null)
            {
                var prvMsg = Util.JsonToObject<ResponseData<Tweet>>(json);
                CallBack(prvMsg);
            }
        }
        #endregion

        #region 获取私信发件箱列表

        /// <summary>
        /// 采用默认API请求地址获取私信发件箱列表
        /// </summary>
        /// <param name="pageflag">分页标识</param>
        /// <param name="pagetime">本页起始时间（第一页 0，继续：根据返回记录时间决定）</param>
        /// <param name="reqnum">每次请求记录的条数（1-20条）</param>
        /// <param name="callback"></param>
        /// <returns>获取私信发件箱列表</returns>
        public void GetSendList(PageFlag pageflag, long pagetime, int reqnum, Action<ResponseData<Tweet>> callback)
        {
            this.CallBack = callback;
            var parameters = new Parameters();
            parameters.Add("format", this.ResponseDataFormat.ToString().ToLower());
            parameters.Add("pageflag", (int)pageflag);
            parameters.Add("pagetime", pagetime);
            parameters.Add("reqnum", reqnum);
            this.GetData("http://open.t.qq.com/api/private/send", parameters, GetRecvListEnd);
        }

        #endregion
    }
}
